package com.example.smartall.ui;

import androidx.annotation.NonNull;

import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.example.smartall.R;
import com.example.smartall.adapter.PervasiveAdapter;
import com.example.smartall.api.Api;
import com.example.smartall.api.ApiConfig;
import com.example.smartall.api.NetCallBack;
import com.example.smartall.entity.ParkingHistoryBean;
import com.example.smartall.ui.base.BaseActivity;
import com.example.smartall.utils.TextUtils;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
  * @Author:         abbas
  * @CreateDate:     2022/1/30
  * @Description:    历史停车页面 敲黑板划重点
  */

///////////////////////////////////////////////////////////////////////////
// 默认加载所有历史记录 记录条数上千 分页加载 每页5条记录
// 若搜索框为空 点击搜索恒定加载第一页 清空页数记录 加载更多按钮则继续加载第二页
// 在搜索框填入搜索条件 点击搜索以搜索条件匹配数据第一页 清空页数记录 此时为搜索模式 点击加载更多按钮则判定为搜索模式 加载第二页
// 在搜索框更改条件 点击搜索以更新搜索条件匹配数据第一页 清空页数记录 清空历史加载数据 点击加载更多为搜索模式 加载第二页
// 在搜索框更改条件 不点击搜索直接点击加载更多 清空页数记录 清空历史加载数据 加载第一页
// 在搜索完毕后清空搜索框 判断为普通模式
//
///////////////////////////////////////////////////////////////////////////

public class CarParkingHistoryActivity extends BaseActivity {
     private ImageView imBack;
     private TextView tvTitle;
     private EditText etIn;
     private EditText etOut;
     private ImageButton ibSearch;
     private ListView lvList;
     private Button btLoadMore;

     private List<ParkingHistoryBean.RowsBean> historyBeans = new ArrayList<>();
     private ParkingHistoryListAdapter adapter;

     //当前页数
     private int pageNum = 1;
     //总数
     private int total = -1;
     //是否搜索模式
     private boolean searchModel = false;
     //当前搜索框一存档
     private String currentEtIn;
     //当前搜索框二存档
     private String currentEtOut;

     private MHandler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_car_parking_history);

        handler = new MHandler();

        init();
        initEvent();
    }

    @Override
    protected void onResume() {
        super.onResume();
        getParkingHistory(pageNum);
    }

    @Override
    public void init() {
        imBack = (ImageView) findViewById(R.id.im_back);
        tvTitle = (TextView) findViewById(R.id.tv_title);
        etIn = (EditText) findViewById(R.id.et_in);
        etOut = (EditText) findViewById(R.id.et_out);
        ibSearch = (ImageButton) findViewById(R.id.ib_search);
        lvList = (ListView) findViewById(R.id.lv_list);
        btLoadMore = findViewById(R.id.bt_loadMore);

        tvTitle.setText("历史停车记录");
    }

    @Override
    public void initEvent() {
        //返回
        imBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                CarParkingHistoryActivity.this.finish();
            }
        });
        //加载更多
        btLoadMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //判断是否加载完所有信息 Bug 当加载完成所有数据 更改搜索框数据后 点击加载更多 这里会因为加载完成直接拦下来
                if (total <= pageNum*5) {
                    showToast("没有更多信息...");
                    return;
                }
                //若点击搜索按钮后更改了搜索条件 不点搜索按钮 点击加载更多 在此判断当前搜索框和上次点击搜索按钮的值是否一致 若不一致 清除数据 使值相等
                if (!currentEtIn.equals(etIn.getText().toString().trim()) || !currentEtOut.equals(etOut.getText().toString())){
                    historyBeans.clear();
                    pageNum = 0;
                    currentEtIn = etIn.getText().toString().trim();
                    currentEtOut = etOut.getText().toString().trim();
                }

                ++pageNum;
                getParkingHistory(pageNum);
            }
        });

        //搜索按钮 点击搜索按钮恒定搜索第一页 清空历史数据 并保存当前搜索框匹配数据
        ibSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                currentEtIn = etIn.getText().toString().trim();
                currentEtOut = etOut.getText().toString().trim();
                pageNum = 1;
                historyBeans.clear();
                getParkingHistory(1);
            }
        });
    }

     /**
      * @brief 没写过这逻辑还真仔细要考虑一下
      * @param pageNum 加载页数
      * @return null
      */
    private void getParkingHistory(int pageNum){
        //若搜索框有一者不为空 即为搜索模式
        if (!TextUtils.hasEmpty(etOut) || !TextUtils.hasEmpty(etIn)){
            //搜索模式下 判断此前是否已经搜索
            if (searchModel){  //如果此前已经搜索过了 则不清空数据
                //searchModel = true;
            }else {  //如果此前没有搜索过 弃用之前加载的数据 弃用之后切换为搜索模式
                historyBeans.clear();
                pageNum = 1;
                if (adapter != null){
                    adapter.notifyDataSetChanged();
                }
                searchModel = true;
            }
        }else { //若搜索框全部为空 切换为普通模式
            //若此前为搜索模式 清除历史数据
            if (searchModel) historyBeans.clear();
            //更换模式为普通
            searchModel = false;
        }
        showToast("当前页数："+pageNum);

        HashMap<String,Object> params = new HashMap<>();
        params.put("entryTime",etIn.getText().toString());
        params.put("outTime",etOut.getText().toString());
        params.put("pageNum",pageNum);
        params.put("pageSize",5);
        Api.config(ApiConfig.PARKING_HISTORY_LIST,params).getRequest(new NetCallBack() {
            @Override
            public void onSuccess(String res) {
                ParkingHistoryBean bean = new Gson().fromJson(res,ParkingHistoryBean.class);
                if (bean != null && bean.getCode() == 200){
                    total = bean.getTotal();
                    historyBeans.addAll(bean.getRows());
                    handler.sendEmptyMessage(0x01);
                }
            }

            @Override
            public void onFailure(Exception e) {
                showToastSync("加载失败");
            }
        });
    }

    class MHandler extends Handler{
        @Override
        public void handleMessage(@NonNull Message msg) {
            switch (msg.what){
                case 0x01:
                    if (adapter == null){
                        adapter = new ParkingHistoryListAdapter(historyBeans);
                        lvList.setAdapter(adapter);
                    }else {
                        adapter.notifyDataSetChanged();
                    }
                    break;
            }
        }
    }

    class ParkingHistoryListAdapter extends PervasiveAdapter<ParkingHistoryBean.RowsBean>{

        List<ParkingHistoryBean.RowsBean> datas;

        public ParkingHistoryListAdapter(List<ParkingHistoryBean.RowsBean> datas) {
            super(datas);
            this.datas = datas;
        }

        @Override
        protected void setUI(ViewHolder holder, int position, Context context) {

            ImageView img = (ImageView) holder.getConverView().findViewById(R.id.img);
            TextView title = (TextView) holder.getConverView().findViewById(R.id.title);
            TextView subtitle = (TextView) holder.getConverView().findViewById(R.id.subtitle);
            TextView content = (TextView) holder.getConverView().findViewById(R.id.content);

            img.setVisibility(View.GONE);
            title.setText(datas.get(position).getParkName());
            subtitle.setText("消费："+datas.get(position).getMonetary());
            content.setText("车牌号："+datas.get(position).getPlateNumber()+"\n"+
                    "入场时间："+datas.get(position).getEntryTime()+"\n"+
                    "出场时间:"+datas.get(position).getOutTime());
        }

        @Override
        protected int getLayoutId() {
            return R.layout.common_list_item;
        }
    }
}